#pragma once
#include "DXAMLCommon.h"

#include "IXamlSchemaObject.h"
//class CXString;
//#include "XamlType.h"
class XamlProperty;

class XamlType;
class XamlXmlNamespace;

class XamlNamespace :
	public IXamlSchemaObject
{
protected: 
	XamlNamespace(XUINT32 uiRuntimeIndex);
	XamlNamespace();
public: 
	virtual ~XamlNamespace();
	HRESULT get_TargetNamespace(xshared_ptr<CXString> & outTargetNamespace) const;
	virtual HRESULT get_IsResolved(XBOOL * pOut) = 0;
	virtual HRESULT GetXamlType(const xshared_ptr<CXString> & inTypeName, xshared_ptr<XamlType> & outType) = 0;
	virtual HRESULT GetDirectiveType(const xshared_ptr<CXString> & inTypeName, xshared_ptr<XamlType> & outType) = 0;
	virtual HRESULT GetDirectiveProperty(const xshared_ptr<CXString> & inTypeName, xshared_ptr<XamlProperty> & ppOut) = 0;
	virtual XBOOL IsEqual(const XamlNamespace & rhs) const;
	virtual XamlXmlNamespace * AsXamlXmlNamespace();
	HRESULT GetTypeExtensionName(const xshared_ptr<CXString> & inTypeName, xshared_ptr<CXString> & outName);
	XUINT32 get_RuntimeIndex() const;
	HRESULT SetRuntimeIndex(XUINT32 uiRuntimeIndex);
protected: 
	virtual HRESULT get_TargetNamespaceCore(xshared_ptr<CXString> & outTargetNamespace) = 0;
	virtual HRESULT set_TargetNamespaceCore(const xshared_ptr<CXString> & inTargetNamespace) = 0;
	XUINT32 m_uiRuntimeIndex;
};



